package first

/*
	在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
	示例:
	s = "abaccdeff"
	返回 "b"
	s = ""
	返回 " "
	限制：
	0 <= s 的长度 <= 50000
	来源：力扣（LeetCode）
	链接：https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
	著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func firstUniqChar(s string) byte {
	/*
		1. 给定一个Map m
		2. 遍历s、如果m中当前字符已经存在、赋值为-1、如果不存在、给出索引
		3. 遍历s、找到第一个m中值不为-1的元素
		4. 时间复杂度：O(n)
		5. 空间复杂库：O(n)
	*/
	m := make(map[uint8]int)
	for i := 0; i < len(s); i++ {
		if _, ok := m[s[i]]; ok {
			m[s[i]] = -1
			continue
		}
		m[s[i]] = i
	}
	for i := 0; i < len(s); i++ {
		if m[s[i]] != -1 {
			return s[i]
		}
	}
	return ' '
	//minIndex := math.MaxInt32
	//for _, v := range m {
	//	if minIndex > v && v != -1 {
	//		minIndex = v
	//	}
	//}
	//if minIndex != math.MaxInt32 {
	//	return s[minIndex]
	//}
	//return ' '
}
